////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  aecface.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "aecface.h"
#include "parametersetmanager.h"

AECFACE_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
AECFaceTypeClass::AECFaceTypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(faceMtr);
    PARAMETER_INITIALIZE(faceConv);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
AECFaceTypeClass::AECFaceTypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(faceMtr);
    PARAMETER_INITIALIZE(faceConv);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
AECFaceTypeClass::~AECFaceTypeClass()
{
    UnloadAECFaceType(this);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* AECFaceTypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "Face")) == 0)
    {
        name = "Face";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load FaceConvergenceType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL AECFaceTypeClass::LoadFaceConvergenceType(
    ParameterFileSymbolTableEntry* entry,
    FaceConvergenceType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadFloat(&structure->convSpeedAdjRatio);
    result = result && entry->ReadFloat(&structure->speedAdjDelayTimeEnter);
    result = result && entry->ReadFloat(&structure->speedAdjDelayTimeExit);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load FaceMeteringType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL AECFaceTypeClass::LoadFaceMeteringType(
    ParameterFileSymbolTableEntry* entry,
    FaceMeteringType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadBoolean(&structure->enableFaceROI);
    result = result && entry->ReadFloat(&structure->weightTemporalFilter);
    result = result && entry->ReadFloat(&structure->centerWeightStrength);
    result = result && entry->ReadFloat(&structure->statsUpdateDelayTimeEnter);
    result = result && entry->ReadFloat(&structure->statsUpdateDelayTimeExit);
    result = result && entry->ReadBoolean(&structure->enableBackLitComp);
    result = result && aecglobalelements::aecglobalelementsClass::LoadStartEndType(entry, &structure->backlitWeighttAdjSettings);
    result = result && aecglobalelements::aecglobalelementsClass::LoadStartEndType(entry, &structure->thresBackLitLumaRatio);
    result = result && entry->ReadBoolean(&structure->enableHistLumaTargetSuppression);
    result = result && aecglobalelements::aecglobalelementsClass::LoadStartEndType(entry, &structure->faceWeight);
    result = result && LoadFaceMeteringType_faceLumaWeightLuxIndexTriggerStruct(entry, &structure->faceLumaWeightLuxIndexTrigger);
    result = result && aecglobalelements::aecglobalelementsClass::LoadStartEndType(entry, &structure->faceSize);
    result = result && LoadFaceMeteringType_faceSizeWeightLuxIndexTriggerStruct(entry, &structure->faceSizeWeightLuxIndexTrigger);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load FaceMeteringType_faceLumaWeightLuxIndexTriggerStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL AECFaceTypeClass::LoadFaceMeteringType_faceLumaWeightLuxIndexTriggerStruct(
    ParameterFileSymbolTableEntry* entry,
    FaceMeteringType::faceLumaWeightLuxIndexTriggerStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadBoolean(&structure->enableFaceLumaTrigger);
    result = result && aecglobalelements::aecglobalelementsClass::LoadLuxFaceWeightType(entry, &structure->LuxFaceLumaWeight);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load FaceMeteringType_faceSizeWeightLuxIndexTriggerStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL AECFaceTypeClass::LoadFaceMeteringType_faceSizeWeightLuxIndexTriggerStruct(
    ParameterFileSymbolTableEntry* entry,
    FaceMeteringType::faceSizeWeightLuxIndexTriggerStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadBoolean(&structure->enableFaceSizeTrigger);
    result = result && aecglobalelements::aecglobalelementsClass::LoadLuxFaceWeightType(entry, &structure->LuxFaceSizeWeight);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load AECFaceType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL AECFaceTypeClass::LoadAECFaceType(
    ParameterFileSymbolTableEntry* entry,
    AECFaceType* structure)
{
    BOOL result = TRUE;
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);
    result = result && LoadFaceMeteringType(entry, &structure->faceMtr);
    result = result && LoadFaceConvergenceType(entry, &structure->faceConv);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL AECFaceTypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    AECFaceType::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);
    result = result && entry->ReadInt32(&structure->incr_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload FaceMeteringType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void AECFaceTypeClass::UnloadFaceMeteringType(
    FaceMeteringType* structure)
{
    UnloadFaceMeteringType_faceLumaWeightLuxIndexTriggerStruct(&structure->faceLumaWeightLuxIndexTrigger);
    UnloadFaceMeteringType_faceSizeWeightLuxIndexTriggerStruct(&structure->faceSizeWeightLuxIndexTrigger);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload FaceMeteringType_faceLumaWeightLuxIndexTriggerStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void AECFaceTypeClass::UnloadFaceMeteringType_faceLumaWeightLuxIndexTriggerStruct(
    FaceMeteringType::faceLumaWeightLuxIndexTriggerStruct* structure)
{
    aecglobalelements::aecglobalelementsClass::UnloadLuxFaceWeightType(&structure->LuxFaceLumaWeight);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload FaceMeteringType_faceSizeWeightLuxIndexTriggerStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void AECFaceTypeClass::UnloadFaceMeteringType_faceSizeWeightLuxIndexTriggerStruct(
    FaceMeteringType::faceSizeWeightLuxIndexTriggerStruct* structure)
{
    aecglobalelements::aecglobalelementsClass::UnloadLuxFaceWeightType(&structure->LuxFaceSizeWeight);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload AECFaceType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void AECFaceTypeClass::UnloadAECFaceType(
    AECFaceType* structure)
{
    UnloadFaceMeteringType(&structure->faceMtr);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* AECFaceTypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    AECFaceTypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW AECFaceTypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadAECFaceType(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


AECFACE_NAMESPACE_END
